package com.vdong.redis.data.core.json.ops.impl;

import com.vdong.redis.data.core.json.FastJsonRedisTemplate;
import com.vdong.redis.data.core.json.ops.FastJsonListOperations;
import org.springframework.data.redis.core.ListOperations;

import java.util.Collection;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * ops覆盖类，可提供原先ops没有的方法
* @author <a href="mailto:zhudelie@zuozh.com">zhudelie</a>
* @version 
* @since JDK 1.6
* create on 2017年3月31日
* Copyright 2017 ZZJR All Rights Reserved.
*
*/
public class FastJsonListOperationsImpl<K,V> extends OperationsAware<K, V> implements FastJsonListOperations<K,V> {
	private ListOperations<K,V> ops;
	public FastJsonListOperationsImpl(ListOperations<K,V> ops, FastJsonRedisTemplate<K,V> template){
		super(template);
		this.ops = ops;
	}
	/**
	 * 获取从start到end下表的所有元素
	 */
	
	public List<V> range(K key, long start, long end) {
		// TODO Auto-generated method stub
		return ops.range(key, start, end);
	}
	/**
	 * 修剪列表，保留从start到end下表的元素
	 */
	
	public void trim(K key, long start, long end) {
		ops.trim(key, start, end);
	}
	/**
	 * 个数
	 */
	
	public Long size(K key) {
		// TODO Auto-generated method stub
		return ops.size(key);
	}
	/**
	 * 从左边加入队列
	 */
	
	public Long leftPush(K key, V value) {
		// TODO Auto-generated method stub
		return ops.leftPush(key, value);
	}
	/**
	 * 多个元素从左边加入队列
	 */
	
	public Long leftPushAll(K key, V... values) {
		// TODO Auto-generated method stub
		return ops.leftPushAll(key, values);
	}
	/**
	 * 多个元素从左边加入队列
	 */
	
	public Long leftPushAll(K key, Collection<V> values) {
		// TODO Auto-generated method stub
		return ops.leftPushAll(key, values);
	}
	/**
	 * 从左边加入队列，如果该队列存在的话
	 */
	
	public Long leftPushIfPresent(K key, V value) {
		// TODO Auto-generated method stub
		return ops.leftPushIfPresent(key, value);
	}
	/**
	 * 在存在的元素之前插入元素
	 */
	
	public Long leftPush(K key, V pivot, V value) {
		// TODO Auto-generated method stub
		return ops.leftPush(key, value);
	}
	/**
	 * 从右加入队列
	 */
	
	public Long rightPush(K key, V value) {
		// TODO Auto-generated method stub
		return ops.rightPush(key, value);
	}
	/**
	 * 多个元素从右加入队列
	 */
	
	public Long rightPushAll(K key, V... values) {
		// TODO Auto-generated method stub
		return ops.rightPushAll(key, values);
	}
	/**
	 * 多个元素从右加入队列
	 */
	
	public Long rightPushAll(K key, Collection<V> values) {
		// TODO Auto-generated method stub
		return ops.rightPushAll(key, values);
	}
	/**
	 * 从右加入队列，如果该队列存在的话
	 */
	
	public Long rightPushIfPresent(K key, V value) {
		// TODO Auto-generated method stub
		return ops.rightPushIfPresent(key, value);
	}
	/**
	 * 在某个元素之后加入元素
	 */
	
	public Long rightPush(K key, V pivot, V value) {
		// TODO Auto-generated method stub
		return ops.rightPush(key, value);
	}
	/**
	 * 在指定位置加入元素
	 */
	
	public void set(K key, long index, V value) {
		ops.set(key, index, value);
	}
	/**
	 * 删除n个和给定值相同的元素
	 */
	
	public Long remove(K key, long count, Object value) {
		// TODO Auto-generated method stub
		return ops.remove(key, count, value);
	}
	/**
	 * 获得指定位置的元素
	 */
	
	public V index(K key, long index) {
		// TODO Auto-generated method stub
		return (V) ops.index(key, index);
	}
	/**
	 * 左边第一个元素出队
	 */
	
	public V leftPop(K key) {
		// TODO Auto-generated method stub
		return (V) ops.leftPop(key);
	}
	/**
	 * 左边第一个元素出队，阻塞模式
	 */
	
	public V leftPop(K key, long timeout, TimeUnit unit) {
		// TODO Auto-generated method stub
		return (V) ops.leftPop(key,timeout,unit);
	}
	/**
	 * 右边第一个元素出队
	 */
	
	public V rightPop(K key) {
		// TODO Auto-generated method stub
		return (V) ops.rightPop(key);
	}
	/**
	 * 右边第一个元素出队，阻塞模式
	 */
	
	public V rightPop(K key, long timeout, TimeUnit unit) {
		// TODO Auto-generated method stub
		return (V) ops.rightPop(key,timeout,unit);
	}
	/**
	 * 从第一个队列中右边移除第一个元素，插入第二个队列的左边
	 */
	
	public V rightPopAndLeftPush(K sourceKey, K destinationKey) {
		// TODO Auto-generated method stub
		return (V) ops.rightPopAndLeftPush(sourceKey, destinationKey);
	}
	/**
	 * 从第一个队列中右边移除第一个元素，插入第二个队列的左边，阻塞模式
	 */
	
	public V rightPopAndLeftPush(K sourceKey, K destinationKey, long timeout, TimeUnit unit) {
		// TODO Auto-generated method stub
		return (V) ops.rightPopAndLeftPush(sourceKey, destinationKey, timeout, unit);
	}

}
